package com.ds.infra.rpc.core.proxy;

import com.ds.infra.rpc.core.loadbalance.LoadBalance;
import com.ds.infra.rpc.core.transport.client.RpcClient;

import java.lang.reflect.Proxy;

/**
 * 作用：RPC客户端代理工厂类
 *
 * @author WeiShaoying
 */

public class ProxyFactory {
    /**
     * 创建代理实例（统一入口）
     * @param interfaceClass 服务接口类
     * @param rpcClient  RpcClient实例
     * @param version 服务版本
     * @param loadBalance 负载均衡策略
     * @param timeout 超时时间(ms)
     * @param retries 重试次数
     */
    public static <T> T createProxy(Class<T> interfaceClass,
                                    RpcClient rpcClient,  // 修改为RpcClient类型
                                    String version,
                                    LoadBalance loadBalance,
                                    int timeout,
                                    int retries) {
        return (T) Proxy.newProxyInstance(
                interfaceClass.getClassLoader(),
                new Class<?>[]{interfaceClass},
                new RpcClientProxyHandler(rpcClient, version, loadBalance, timeout, retries)
        );
    }
}
